WShape Example

See link below for the current IShapes from the AISC v16 steel database.

Constructing a WShape:

Before constructing, import the AISCSteel package. Also import the StructuralUnits package since we will use it later on.

using StructuralUnits
import AISCSteel
import AISCSteel.Shapes.IShapes.RolledIShapes as ris
Importing the Package

The reason to call using for StructuralUnits is so the variables like ft, inch, kip, etc are available automatically to you. Using the import for AISCSteel is better so the functions are still contained in the AISCSteel package. This is how AISCSteel was intened to be used. The structure of the package will help guide you to where you want to go. As you type the ., suggestions will pop up giving you an idea of where you need to go. You may have to hit Tab to see the suggestions. In the Julia REPL you will need to hit Tab twice to see the list of suggestions.

Now that the package has been imported, lets construct a W14X90.

w = ris.WShape("W14x90")
AISCSteel.Shapes.IShapes.RolledIShapes.WShape("W14X90", 90.0 plf, 26.5 inch^2, 14.0 inch, 14.5 inch, 0.44 inch, 0.71 inch, 1.31 inch, 1.4375 inch, 11.396 inch, 999.0 inch^4, 157.0 inch^3, 143.0 inch^3, 6.14 inch, 362.0 inch^4, 75.6 inch^3, 49.9 inch^3, 3.7 inch, 4.06 inch^4, 16000.0 inch^6, 48.2 inch^2, 124.0 inch^4, 33.2 inch^3, 77.1 inch^3, 4.1 inch, 13.3 inch, 69.6 inch, 84.1 inch, 42.5 inch, 57.0 inch, 10.0 inch, 5.5 inch, 0.0 inch, 29000.0 ksi, 50.0 ksi)

The following went and searched through the AISC v16 steel database and pulled the relevant info to construct a WShape. You can now access information in the struct like so:

The width of the flange:

w.b_f
14.5 inch

The weight of the WShape:

w.weight
90.0 plf

Compression Capacity of WShape:

See link below for the available functions relating to compression for the WShape member:

We can calculate the compressive capacity of the W14X90 shape we just constructed:

L_cx = L_cy = 20ft
ϕ_c = 0.9
P_n = ris.Compression.calc_Pn(w, L_cx, L_cy)
ϕP_n = ϕ_c * P_n
876.7044321578569 kip

This is great. However, as engineers, we would like it if we could see what the function did. That is where Handcalcs.jl comes in. This package can look into the function and show you what the function did. All you need to do is type @handcalcs in front of the line that called the calc_Pn function:

using Handcalcs
set_handcalcs(precision=2) # sets number of decimals displayed

@handcalcs P_n = ris.Compression.calc_Pn(w, L_cx, L_cy)

\[\begin{aligned} b &= \frac{b_{f}}{2} = \frac{14.5\;\mathrm{inch}}{2} = 7.25\;\mathrm{inch} \\[10pt] t &= t_{f} = 0.71\;\mathrm{inch} \\[10pt] \lambda &= \frac{b}{t} = \frac{7.25\;\mathrm{inch}}{0.71\;\mathrm{inch}} = 10.21 \\[10pt] \lambda_{r} &= 0.56 \cdot \sqrt{\frac{E}{F_{y}}} = 0.56 \cdot \sqrt{\frac{29000\;\mathrm{ksi}}{50\;\mathrm{ksi}}} = 13.49 \\[10pt] \text{Since: }\lambda \leq \lambda_{r} &= 10.21 \leq 13.49 = true \\[10pt] class &= nonslender \\[10pt] h &= h = 11.4\;\mathrm{inch} \\[10pt] t_{w} &= t_{w} = 0.44\;\mathrm{inch} \\[10pt] \lambda &= \frac{h}{t_{w}} = \frac{11.4\;\mathrm{inch}}{0.44\;\mathrm{inch}} = 25.9 \\[10pt] \lambda_{r} &= 1.49 \cdot \sqrt{\frac{E}{F_{y}}} = 1.49 \cdot \sqrt{\frac{29000\;\mathrm{ksi}}{50\;\mathrm{ksi}}} = 35.88 \\[10pt] \text{Since: }\lambda \leq \lambda_{r} &= 25.9 \leq 35.88 = true \\[10pt] class &= nonslender \\[10pt] \text{Since: }\frac{L_{cx}}{r_{x}} > \frac{L_{cy}}{r_{y}} &= \frac{20\;\mathrm{ft}}{6.14\;\mathrm{inch}} > \frac{20\;\mathrm{ft}}{3.7\;\mathrm{inch}} = false \\[10pt] L_{c} &= L_{cy} = 20\;\mathrm{ft} \\[10pt] r &= r_{y} = 3.7\;\mathrm{inch} \\[10pt] F_{e} &= \frac{\pi^{2} \cdot E}{\left( \frac{L_{c}}{r} \right)^{2}} = \frac{3.14^{2} \cdot 29000\;\mathrm{ksi}}{\left( \frac{20\;\mathrm{ft}}{3.7\;\mathrm{inch}} \right)^{2}} = 68.03\;\mathrm{ksi} \\[10pt] \text{Since: }\frac{L_{c}}{r} \leq 4.71 \cdot \sqrt{\frac{E}{F_{y}}} &= \frac{20\;\mathrm{ft}}{3.7\;\mathrm{inch}} \leq 4.71 \cdot \sqrt{\frac{29000\;\mathrm{ksi}}{50\;\mathrm{ksi}}} = true \\[10pt] F_{n} &= 0.66^{\frac{F_{y}}{F_{e}}} \cdot F_{y} = 0.66^{\frac{50\;\mathrm{ksi}}{68.03\;\mathrm{ksi}}} \cdot 50\;\mathrm{ksi} = 36.76\;\mathrm{ksi} \\[10pt] \text{Since: }\lambda_{wclass} &= nonslender = true \\[10pt] \text{Since: }\lambda_{fclass} &= nonslender = true \\[10pt] P_{n} &= F_{n} \cdot A_{g} = 36.76\;\mathrm{ksi} \cdot 26.5\;\mathrm{inch}^{2} = 974.12\;\mathrm{kip} \end{aligned}\]

Wow! No more black boxes!

AISCSteel and Handcalcs

AISCSteel has been designed with Handcalcs.jl in mind. So if you are in an environment like Pluto or Jupyter Notebook, you can use @handcalcs to understand what is going on inside the function. You can also use it to generate nice, readable calculations. See here. There is also an extensive demo to see more functionality. See the Handcalcs Demo.

Flexure Capacity of WShape:

See link below for the available functions relating to flexure for the WShape member:

Major Axis Bending

We can calculate the flexural capacity about the x-axis of the W14X90 shape we just constructed:

L_b = 20ft
ϕ_b = 0.9
M_nx = ris.Flexure.calc_Mnx(w, L_b)
ϕM_nx = ϕ_b * M_nx
538.5180966509897 ft kip

Lets see what the calc_Mnx function did:

@handcalcs M_nx = ris.Flexure.calc_Mnx(w, L_b)

\[\begin{aligned} b &= \frac{b_{f}}{2} = \frac{14.5\;\mathrm{inch}}{2} = 7.25\;\mathrm{inch} \\[10pt] t &= t_{f} = 0.71\;\mathrm{inch} \\[10pt] \lambda &= \frac{b}{t} = \frac{7.25\;\mathrm{inch}}{0.71\;\mathrm{inch}} = 10.21 \\[10pt] \lambda_{p} &= 0.38 \cdot \sqrt{\frac{E}{F_{y}}} = 0.38 \cdot \sqrt{\frac{29000\;\mathrm{ksi}}{50\;\mathrm{ksi}}} = 9.15 \\[10pt] \lambda_{r} &= 1 \cdot \sqrt{\frac{E}{F_{y}}} = 1 \cdot \sqrt{\frac{29000\;\mathrm{ksi}}{50\;\mathrm{ksi}}} = 24.08 \\[10pt] \text{Since: }\lambda_{p} < \lambda \leq \lambda_{r} &= 9.15 < 10.21 \leq 24.08 = true \\[10pt] class &= noncompact \\[10pt] h &= h = 11.4\;\mathrm{inch} \\[10pt] t_{w} &= t_{w} = 0.44\;\mathrm{inch} \\[10pt] \lambda &= \frac{h}{t_{w}} = \frac{11.4\;\mathrm{inch}}{0.44\;\mathrm{inch}} = 25.9 \\[10pt] \lambda_{p} &= 3.76 \cdot \sqrt{\frac{E}{F_{y}}} = 3.76 \cdot \sqrt{\frac{29000\;\mathrm{ksi}}{50\;\mathrm{ksi}}} = 90.55 \\[10pt] \lambda_{r} &= 5.7 \cdot \sqrt{\frac{E}{F_{y}}} = 5.7 \cdot \sqrt{\frac{29000\;\mathrm{ksi}}{50\;\mathrm{ksi}}} = 137.27 \\[10pt] \text{Since: }\lambda \leq \lambda_{p} &= 25.9 \leq 90.55 = true \\[10pt] class &= compact \\[10pt] \lambda_f, \lambda_pf, \lambda_rf, \lambda_fclass &= \lambda_{fvariabels} = \left[ \begin{array}{c} 10.21 \\ 9.15 \\ 24.08 \\ noncompact \\ \end{array} \right] \\[10pt] \lambda_w, \lambda_pw, \lambda_rw, \lambda_wclass &= \lambda_{wvariabels} = \left[ \begin{array}{c} 25.9 \\ 90.55 \\ 137.27 \\ compact \\ \end{array} \right] \\[10pt] \text{Since: }\lambda_{wclass} &= compact = true \\[10pt] \text{Since: }\lambda_{fclass} &= compact = noncompact = false \\[10pt] c &= 1 \\[10pt] M_{p} &= F_{y} \cdot Z_{x} = 50\;\mathrm{ksi} \cdot 157\;\mathrm{inch}^{3} = 654.17\;\mathrm{ft}\,\mathrm{kip} \\[10pt] L_{p} &= 1.76 \cdot r_{y} \cdot \sqrt{\frac{E}{F_{y}}} = 1.76 \cdot 3.7\;\mathrm{inch} \cdot \sqrt{\frac{29000\;\mathrm{ksi}}{50\;\mathrm{ksi}}} = 13.07\;\mathrm{ft} \\[10pt] L_{r} &= 1.95 \cdot r_{ts} \cdot \frac{E}{0.7 \cdot F_{y}} \cdot \sqrt{\frac{J \cdot c}{S_{x} \cdot h_{0}} + \sqrt{\left( \frac{J \cdot c}{S_{x} \cdot h_{0}} \right)^{2} + 6.76 \cdot \left( \frac{0.7 \cdot F_{y}}{E} \right)^{2}}} = 1.95 \cdot 4.1\;\mathrm{inch} \cdot \frac{29000\;\mathrm{ksi}}{0.7 \cdot 50\;\mathrm{ksi}} \cdot \sqrt{\frac{4.06\;\mathrm{inch}^{4} \cdot 1}{143\;\mathrm{inch}^{3} \cdot 13.3\;\mathrm{inch}} + \sqrt{\left( \frac{4.06\;\mathrm{inch}^{4} \cdot 1}{143\;\mathrm{inch}^{3} \cdot 13.3\;\mathrm{inch}} \right)^{2} + 6.76 \cdot \left( \frac{0.7 \cdot 50\;\mathrm{ksi}}{29000\;\mathrm{ksi}} \right)^{2}}} = 42.51\;\mathrm{ft} \\[10pt] F_{cr} &= \frac{C_{b} \cdot \pi^{2} \cdot E}{\left( \frac{L_{b}}{r_{ts}} \right)^{2}} \cdot \sqrt{1 + 0.08 \cdot \frac{J \cdot c}{S_{x} \cdot h_{0}} \cdot \left( \frac{L_{b}}{r_{ts}} \right)^{2}} = \frac{1 \cdot 3.14^{2} \cdot 29000\;\mathrm{ksi}}{\left( \frac{20\;\mathrm{ft}}{4.1\;\mathrm{inch}} \right)^{2}} \cdot \sqrt{1 + 0.08 \cdot \frac{4.06\;\mathrm{inch}^{4} \cdot 1}{143\;\mathrm{inch}^{3} \cdot 13.3\;\mathrm{inch}} \cdot \left( \frac{20\;\mathrm{ft}}{4.1\;\mathrm{inch}} \right)^{2}} = 104.68\;\mathrm{ksi} \\[10pt] k_{c} &= \frac{4}{\sqrt{\frac{h}{t_{w}}}} = \frac{4}{\sqrt{\frac{11.4\;\mathrm{inch}}{0.44\;\mathrm{inch}}}} = 0.79 \\[10pt] k_{c} &= \mathrm{max}\left( \mathrm{min}\left( k_{c}, 0.76 \right), 0.35 \right) = \mathrm{max}\left( \mathrm{min}\left( 0.79, 0.76 \right), 0.35 \right) = 0.76 \\[10pt] \text{Since: }L_{p} < L_{b} \leq L_{r} &= 13.07\;\mathrm{ft} < 20\;\mathrm{ft} \leq 42.51\;\mathrm{ft} = true \\[10pt] M_{nLTB} &= C_{b} \cdot \left( M_{p} - \left( M_{p} - 0.7 \cdot F_{y} \cdot S_{x} \right) \cdot \frac{L_{b} - L_{p}}{L_{r} - L_{p}} \right) = 1 \cdot \left( 654.17\;\mathrm{ft}\,\mathrm{kip} - \left( 654.17\;\mathrm{ft}\,\mathrm{kip} - 0.7 \cdot 50\;\mathrm{ksi} \cdot 143\;\mathrm{inch}^{3} \right) \cdot \frac{20\;\mathrm{ft} - 13.07\;\mathrm{ft}}{42.51\;\mathrm{ft} - 13.07\;\mathrm{ft}} \right) = 598.35\;\mathrm{ft}\,\mathrm{kip} \\[10pt] \text{Since: }\lambda_{fclass} &= noncompact = true \\[10pt] M_{nCFLB} &= M_{p} - \left( M_{p} - 0.7 \cdot F_{y} \cdot S_{x} \right) \cdot \frac{\lambda_{f} - \lambda_{pf}}{\lambda_{rf} - \lambda_{pf}} = 654.17\;\mathrm{ft}\,\mathrm{kip} - \left( 654.17\;\mathrm{ft}\,\mathrm{kip} - 0.7 \cdot 50\;\mathrm{ksi} \cdot 143\;\mathrm{inch}^{3} \right) \cdot \frac{10.21 - 9.15}{24.08 - 9.15} = 637.34\;\mathrm{ft}\,\mathrm{kip} \\[10pt] M_{n} &= \mathrm{min}\left( M_{nLTB}, M_{nCFLB} \right) = \mathrm{min}\left( 598.35\;\mathrm{ft}\,\mathrm{kip}, 637.34\;\mathrm{ft}\,\mathrm{kip} \right) = 598.35\;\mathrm{ft}\,\mathrm{kip} \end{aligned}\]

Minor Axis Bending

We can calculate the flexural capacity about the y-axis of the W14X90 shape we just constructed:

M_ny = ris.Flexure.calc_Mny(w)
ϕM_ny = ϕ_b * M_ny
272.6765792141038 ft kip

Lets see what the calc_Mny function did:

@handcalcs M_ny = ris.Flexure.calc_Mny(w)

\[\begin{aligned} b &= \frac{b_{f}}{2} = \frac{14.5\;\mathrm{inch}}{2} = 7.25\;\mathrm{inch} \\[10pt] t &= t_{f} = 0.71\;\mathrm{inch} \\[10pt] \lambda &= \frac{b}{t} = \frac{7.25\;\mathrm{inch}}{0.71\;\mathrm{inch}} = 10.21 \\[10pt] \lambda_{p} &= 0.38 \cdot \sqrt{\frac{E}{F_{y}}} = 0.38 \cdot \sqrt{\frac{29000\;\mathrm{ksi}}{50\;\mathrm{ksi}}} = 9.15 \\[10pt] \lambda_{r} &= 1 \cdot \sqrt{\frac{E}{F_{y}}} = 1 \cdot \sqrt{\frac{29000\;\mathrm{ksi}}{50\;\mathrm{ksi}}} = 24.08 \\[10pt] \text{Since: }\lambda_{p} < \lambda \leq \lambda_{r} &= 9.15 < 10.21 \leq 24.08 = true \\[10pt] class &= noncompact \\[10pt] b &= \frac{b_{f}}{2} = \frac{14.5\;\mathrm{inch}}{2} = 7.25\;\mathrm{inch} \\[10pt] M_{p} &= \mathrm{min}\left( F_{y} \cdot Z_{y}, 1.6 \cdot F_{y} \cdot S_{y} \right) = \mathrm{min}\left( 50\;\mathrm{ksi} \cdot 75.6\;\mathrm{inch}^{3}, 1.6 \cdot 50\;\mathrm{ksi} \cdot 49.9\;\mathrm{inch}^{3} \right) = 315\;\mathrm{ft}\,\mathrm{kip} \\[10pt] F_{cr} &= \frac{0.7 \cdot E}{\left( \frac{b}{t_{f}} \right)^{2}} = \frac{0.7 \cdot 29000\;\mathrm{ksi}}{\left( \frac{7.25\;\mathrm{inch}}{0.71\;\mathrm{inch}} \right)^{2}} = 194.69\;\mathrm{ksi} \\[10pt] M_{nFY} &= M_{p} = 315\;\mathrm{ft}\,\mathrm{kip} \\[10pt] \text{Since: }\lambda_{fclass} &= noncompact = true \\[10pt] M_{nLTB} &= M_{p} - \left( M_{p} - 0.7 \cdot F_{y} \cdot S_{y} \right) \cdot \frac{\lambda_{f} - \lambda_{pf}}{\lambda_{rf} - \lambda_{pf}} = 315\;\mathrm{ft}\,\mathrm{kip} - \left( 315\;\mathrm{ft}\,\mathrm{kip} - 0.7 \cdot 50\;\mathrm{ksi} \cdot 49.9\;\mathrm{inch}^{3} \right) \cdot \frac{10.21 - 9.15}{24.08 - 9.15} = 302.97\;\mathrm{ft}\,\mathrm{kip} \\[10pt] M_{n} &= \mathrm{min}\left( M_{nFY}, M_{nFLB} \right) = \mathrm{min}\left( 315\;\mathrm{ft}\,\mathrm{kip}, 302.97\;\mathrm{ft}\,\mathrm{kip} \right) = 302.97\;\mathrm{ft}\,\mathrm{kip} \end{aligned}\]